package com.my.fss.common.util;

import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * request请求工具类
 * 
 * @author 韩晗 	2015-09-06
 */
@Component("requestUtilFss")
@SuppressWarnings("serial")
public class RequestUtil implements java.io.Serializable {

	
	private HttpServletRequest request;

	
	public RequestUtil() {
	}
	public RequestUtil(HttpServletRequest request) {
		this.request = request;
	}

	/**
	 * 提取IP
	 * 
	 * @author 韩晗
	 * @return 如果request=null 返回null，否则返回ip字符串
	 */
	public String getIp() {
		if (request == null) {
			return null;
		}

		String ip = request.getHeader("x-forwarded-for");
		if (ip == null || ip.length() == 0) {
			ip = request.getRemoteAddr();
		}
		return ip;
	}

	/**
	 * 是否是ajax提交
	 * 
	 * @author 韩晗
	 * @return 如果request=null 返回null，否则返回布尔值
	 */
	public Boolean isAjax() {
		if (request == null) {
			return null;
		}

		return "XMLHttpRequest".equalsIgnoreCase(request
				.getHeader("X-Requested-With"));
	}

	/**
	 * 是否是POST提交
	 * 
	 * @author 韩晗
	 * @return 如果request=null 返回null，否则返回布尔值
	 */
	public Boolean isPost() {
		if (request == null) {
			return null;
		}

		return request.getMethod().toUpperCase().equals("POST");
	}

	/**
	 * 是否是GET提交
	 * 
	 * @author 韩晗
	 * @return 如果request=null 返回null，否则返回布尔值
	 */
	public Boolean isGet() {
		if (request == null) {
			return null;
		}

		return request.getMethod().toUpperCase().equals("GET");
	}

	/**
	 * 获得服务根地址（不含项目偏移路径）
	 * 
	 * @author 韩晗
	 * @return 例如：http://127.0.0.1:8080
	 */
	public String getServerPath() {
		if (request == null) {
			return null;
		}

		if (request.getServerPort() == 80) {
			return request.getScheme() + "://" + request.getServerName();
		} 
		else {
			return request.getScheme() + "://" + request.getServerName() + ":"
					+ request.getServerPort();
		}
	}
	
	/**
	 * 获得网站地址（包括偏移路径）
	 * 
	 * @author 韩晗
	 * @return 例如：http://127.0.0.1:8080/[webName]
	 */
	public String getRootPath() {
		if (request == null) {
			return null;
		}

		return getServerPath() + request.getContextPath();
	}

	/**
	 * 获取当前请求的完整路径
	 * 
	 * @author 韩晗
	 * @return
	 */
	public String getFullPath() {
		if (request == null) {
			return null;
		}

		return getServerPath() + getUrl();
	}

	/**
	 * 获取当前请求的路径，不含服务根地址
	 * 
	 * @author 韩晗
	 * @return
	 */
	public String getUrl() {
		if (request == null) {
			return null;
		}

		String url = request.getRequestURI();
		if (request.getQueryString() != null) {
			url += "?" + request.getQueryString();
		}

		return url;
	}

	/**
	 * 获取当前请求的前驱页面地址，也就是访问是从哪个页面链接跳过来的
	 * 
	 * @author 韩晗
	 * @return
	 */
	public String getRefererUrl() {
		if (request == null) {
			return null;
		}

		return request.getHeader("Referer");
	}

	
	/** Setter && Getter */
	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}
	public HttpServletRequest getRequest() {
		return request;
	}
}
